import pymysql

# 数据库配置
db_conf = {
    "host": 'localhost',
    "user": 'root',
    "password": '123456',
    "database": 'test03',
    "charset": 'utf8mb4',
}

# 原表名和 ID 起始点
original_table = 'zssh'  # 请替换为你的实际表名
start_id = 3350590

# 新表名
new_table_1 = original_table + '_part1'
new_table_2 = original_table + '_part2'

# 连接数据库
connection = pymysql.connect(**db_conf)
try:
    with connection.cursor() as cursor:
        # 1. 查询原表结构（用于创建新表）
        cursor.execute(f"SHOW CREATE TABLE `{original_table}`")
        create_table_sql = cursor.fetchone()[1]

        # 2. 创建两个新表（如果不存在）
        cursor.execute(f"DROP TABLE IF EXISTS `{new_table_1}`")
        cursor.execute(create_table_sql.replace(f'`{original_table}`', f'`{new_table_1}`'))

        cursor.execute(f"DROP TABLE IF EXISTS `{new_table_2}`")
        cursor.execute(create_table_sql.replace(f'`{original_table}`', f'`{new_table_2}`'))

        # 3. 查询 id > 3350590 的所有数据
        cursor.execute(f"SELECT * FROM `{original_table}` WHERE id > %s ORDER BY id", (start_id,))
        rows = cursor.fetchall()

        if not rows:
            print("没有符合条件的数据。")
        else:
            # 4. 将数据平均分成两部分
            mid = len(rows) // 2
            part1 = rows[:mid]
            part2 = rows[mid:]

            print(f"总记录数: {len(rows)}")
            print(f"第一部分记录数: {len(part1)}")
            print(f"第二部分记录数: {len(part2)}")

            # 5. 获取字段数量（用于构建 INSERT 语句）
            cursor.execute(f"SELECT * FROM `{original_table}` LIMIT 1")
            col_count = len(cursor.description)
            placeholders = ','.join(['%s'] * col_count)

            # 6. 插入第一部分数据
            insert_sql_1 = f"INSERT INTO `{new_table_1}` VALUES ({placeholders})"
            cursor.executemany(insert_sql_1, part1)

            # 7. 插入第二部分数据
            insert_sql_2 = f"INSERT INTO `{new_table_2}` VALUES ({placeholders})"
            cursor.executemany(insert_sql_2, part2)

            connection.commit()
            print(f"数据已成功拆分并保存到 {new_table_1} 和 {new_table_2}")

except Exception as e:
    print(f"发生错误: {e}")
    connection.rollback()
finally:
    connection.close()